php作为后台程序只提供数据,所有的展示都交给前台
而前台中数据和界面dom的双向绑定使用angular。
前端全给angluar进行掌控,php作为后端只需要给angular提供数据
一般来说,jquery是用$.get来和后台交互,angular是用$http , ngResource(RESTful APIs)来进行后台交互
那么我不想这样,我希望前端直接调用后台函数。
我想到了 hprose
于是前台我这样设计
<html>
<head>
<script type="text/javascript" src="hprose.js" flashpath="/"></script>
<script src="//cdn.bootcss.com/angular.js/1.4.4/angular.js"></script>
<script>
var server = new HproseHttpClient("http://localhost/index.php", ["mainInit"]);
angular.module("demo" , [])
.controller( 'demoController' , function($scope){
$scope.contents = "hehe";
server.mainInit("User@login", {name:"personOne" , password:"1478520"} , function(result) {
$scope.contents = result;
$scope.$apply();
});
});
</script>
</head>
<body ng-app="demo">
<div ng-controller="demoController">
<h1 >{{contents}}</h1>
</div>
</body>
</html>
里面的server是一个全局的变量,以保证我能在angluar的各各controller中进行调用
server的mainInit方法(也是后台php的入口函数)
第一个参数是调用的类和方法名
第二个参数是方法需要的参数
第三个参数是成功的回调函数
(具体的hprose的 js和php的用法大家请看官网的github,特别里面的README )
下面要说后台了,
//index.php
<?php
require_once('../src/Hprose.php');
require_once( __DIR__ .'/vendor/autoload.php');
function mainInit($class_action,$args) {
$info = explode('@' , $class_action);
$className = "app\\".$info[0];
$method = $info[1];
$object = new $className;
return $object->$method($args);
}
$server = new HproseHttpServer();
$server->setErrorTypes(E_ALL);
$server->setDebugEnabled();
$server->addFunction('mainInit');
$server->start();
这个的写法就是 hprose 的server端写法
这里我用了composer的自动加载 ( composer请看岁寒老师的博客)
我的想法就是js直接调用php的函数,进行获取数据至于怎么调用php,这个交给hprose.
后台要做的就是获取数据交给前台
至于后台如何进行规划,就类似与一般的php框架了
我觉得这个想法有点类似与restful,但也不太一样,
比如我不需要考虑请求方式对应的操作方式.
之所以有这个想法是最近公司要用meteor,meteor给了我这个启发。
比如如果前端的数据变动了
使用angular的 watch
$scope.$watch('user' , function($new_data, $old_data){
server.mainInit("User@update" , $new_data ,function(){{
}});
})
我的本意是使用php模拟meteor做一个类似的东西,
今天的这个思路是一个副产品,不过我觉得这个方式进行项目开发的话也是可以
大家有什么建议吗?
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。